package br.com.vendas.menu.filme.crud;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import br.com.vendas.dominio.Filme;
import br.com.vendas.dominio.dto.FilmeDto;
import br.com.vendas.exception.ArqException;
import br.com.vendas.menu.ItemMenu;
import br.com.vendas.menu.filme.crud.consulta.ConsultorFilme;
import br.com.vendas.utils.ValidatorUtil;

public class ItemSelecionarFilme extends ItemMenu {
	private ConsultorFilme consultor;
	List<FilmeDto> filmesDto;
	
	public ItemSelecionarFilme( ConsultorFilme consultor ) {
		this.consultor = consultor;
		init();
	}
	
	public ItemSelecionarFilme() {
		init();
	}
	
	private void init() {
		filmesDto = new ArrayList<FilmeDto>();
	}

	@Override
	public int getId() {
		return 1;
	}

	@Override
	public String getNome() {
		return "Selecionar Filme";
	}

	@Override
	protected void processamento() throws IOException, ArqException {
		if( !validar() ) {
			System.out.println("Nenhum filme foi encontrado");
			
			voltar();
			return;
		}
		
		mostrarFilmes();
		selecionarFilme();
	}
	
	private boolean validar() {
		boolean validado = true;
		
		validado = validado && ValidatorUtil.isNotEmpty(filmesDto); 
		
		return validado;
	}
	
	private void selecionarFilme() throws ArqException {
		String numeroFilme = solicitaDado("Digite o numero do filme para selecionar:");
		int numero = new Integer(numeroFilme);
		
		for( FilmeDto dto : filmesDto ) {
			if( dto.getId() == numero ) {
				consultor.setFilmeConsultado(dto.getFilme());
				break;
			}
		}
	}
	
	private void mostrarFilmes() {
		for( FilmeDto dto : filmesDto ) {
			System.out.println(
					String.format("%d - %s", dto.getId(), dto.getFilme().getNome())
				);
		}
	}

	public ConsultorFilme getConsultor() {
		return consultor;
	}

	public void setConsultor(ConsultorFilme consultor) {
		this.consultor = consultor;
	}

	public List<FilmeDto> getFilmesDto() {
		return filmesDto;
	}

	public void setFilmesDto(List<FilmeDto> filmesDto) {
		this.filmesDto = filmesDto;
	}
	
	public void setFilmes(List<Filme> filmes) {
		int i = 0;
		
		for( Filme filme : filmes )
			filmesDto.add( new FilmeDto(++i, filme) );
	}

}
